// server.h - 服务端头文件，只负责服务端逻辑，不重复定义链表
#ifndef SERVER_H  // 服务端专属头文件保护宏
#define SERVER_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>   // 网络套接字相关
#include <netinet/in.h>   // 网络地址结构体（sockaddr_in）
#include <arpa/inet.h>    // 字节序转换（htons/inet_ntoa）
#include <pthread.h>      // 线程相关（若使用）

// 关键：通过 #include 复用 dlist.h 的链表定义，不再重复定义！
#include "dlist.h"

// 客户端结构体（服务端专用，存储客户端连接信息）
typedef struct Client {
    int fd;               // 客户端套接字FD
    char username[64];    // 客户端登录用户名（可选扩展）
    struct sockaddr_in addr; // 客户端网络地址
} Client;

// 服务端结构体（整合服务端核心资源）
typedef struct Server {
    int server_fd;                // 服务端监听套接字FD
    struct sockaddr_in server_addr; // 服务端网络地址
    DList* client_list;           // 客户端链表（使用 dlist.h 中的 DList 类型）
    pthread_t accept_thread;      // 接受连接的线程（可选扩展）
} Server;

// 服务端核心函数声明（仅服务端相关，删除所有链表函数声明）
Server* server_init(int port);           // 初始化服务端
void server_start(Server* server);       // 启动服务端
void server_destroy(Server* server);     // 销毁服务端资源

// 服务端业务函数声明（如账户校验、数据收发等，根据需求添加）
int account_verify(const char* username, const char* password); // 示例：账户校验
ssize_t send_to_client(int client_fd, const char* msg);         // 示例：向客户端发消息

#endif  // SERVER_H  // 闭合服务端头文件保护宏
